package com.marketing.auth.service;

import com.marketing.auth.dto.*;
import com.marketing.auth.entity.User;

import java.util.List;

/**
 * 用户管理服务接口
 */
public interface UserManagementService {
    
    /**
     * 创建用户
     * @param request 创建用户请求
     * @param operator 操作者用户名
     * @return 创建的用户信息
     */
    UserInfoDto createUser(CreateUserRequest request, String operator);
    
    /**
     * 根据ID获取用户详情
     * @param userId 用户ID
     * @return 用户详情
     */
    UserInfoDto getUserById(Long userId);
    
    /**
     * 根据用户名获取用户详情
     * @param username 用户名
     * @return 用户详情
     */
    UserInfoDto getUserByUsername(String username);
    
    /**
     * 更新用户信息
     * @param userId 用户ID
     * @param request 更新用户请求
     * @param operator 操作者用户名
     * @return 更新后的用户信息
     */
    UserInfoDto updateUser(Long userId, UpdateUserRequest request, String operator);
    
    /**
     * 删除用户
     * @param userId 用户ID
     * @param operator 操作者用户名
     * @return 是否删除成功
     */
    boolean deleteUser(Long userId, String operator);
    
    /**
     * 批量删除用户
     * @param userIds 用户ID列表
     * @param operator 操作者用户名
     * @return 删除成功的数量
     */
    int batchDeleteUsers(List<Long> userIds, String operator);
    
    /**
     * 重置用户密码
     * @param userId 用户ID
     * @param request 重置密码请求
     * @param operator 操作者用户名
     * @return 是否重置成功
     */
    boolean resetPassword(Long userId, ResetPasswordRequest request, String operator);
    
    /**
     * 启用/禁用用户
     * @param userId 用户ID
     * @param status 状态：0-禁用，1-启用
     * @param operator 操作者用户名
     * @return 是否操作成功
     */
    boolean updateUserStatus(Long userId, Integer status, String operator);
    
    /**
     * 分页查询用户列表
     * @param request 查询请求
     * @return 分页结果
     */
    PageResult<UserInfoDto> getUserList(UserQueryRequest request);
    
    /**
     * 检查用户名是否存在
     * @param username 用户名
     * @return 是否存在
     */
    boolean isUsernameExist(String username);
    
    /**
     * 检查邮箱是否存在
     * @param email 邮箱
     * @return 是否存在
     */
    boolean isEmailExist(String email);
    
    /**
     * 检查用户名是否存在（排除指定用户ID）
     * @param username 用户名
     * @param excludeUserId 排除的用户ID
     * @return 是否存在
     */
    boolean isUsernameExist(String username, Long excludeUserId);
    
    /**
     * 检查邮箱是否存在（排除指定用户ID）
     * @param email 邮箱
     * @param excludeUserId 排除的用户ID
     * @return 是否存在
     */
    boolean isEmailExist(String email, Long excludeUserId);
}